# -*- coding: utf8 -*-

_author_ = "boboxu"

if __name__=='__main__':
    '''
    添加工作路径
    引用自己写的模块
    '''
    import sys
    import os
    # 获取当前绝对路径
    curPath = os.path.abspath(os.path.dirname(__file__))
    rootPath = os.path.split(curPath)[0]+'\..'
    # 设置模块搜索路径为Root目录
    sys.path.append(rootPath)

from threading import Thread, RLock
from time import sleep
import pandas as pd
import time

# 自己的模块
from LQT.event_engine.event_engine_base import *
from LQT.selenium_api.selenium_yqw import *
from LQT.selenium_api.selenium_yqw import *

class EventOnline(Event):
    
    _logining=False
    _post=False
    _verifying=False
    _online=False
    _triggering=False
    _get_curr_data=False
    _yqwweb=YqwWeb()
    _active=False
    _create=True
    _strategy=None
    _index=0
    _first_run=True
    
    def __init__(self):
        super().__init__(event_type=EventType.EVENT_ONLINE.value)

    @classmethod
    def heart_breat(cls,event):
        cls._strategy=event.event_data_dict["strategy_data"]
        # print('心跳程序.')
        if cls._create:
            # 创建线程进行浏览器操作
            cls._create=False
            cls._thread=Thread(target=cls.run)
            print('创建线程.')
        else:
            # 在创建浏览器线程后下一次驱动时再进行启动
            if not cls._active:
                cls._active=True
                cls._thread.start()
                print('启动线程.')

            if cls._logining:
                # 线程登录过程中，不做处理
                return
            else:
                if not cls._online:
                    # 不处在登录过程中，且不在线，就准备在线程中登录
                    cls._logining=True
                    print('设置命令，在线程中进行登录操作.')
                else:
                    # 不处于登录状态，且在线
                    if  cls._verifying:
                        # 线程验证过程中，不做处理
                        return
                    else:
                        struct_time=time.gmtime()
                        sec=struct_time.tm_min*60+struct_time.tm_sec
                        if sec % 90>=30 and not cls._triggering:
                            #print('Trigger')
                            cls._triggering=True
                            cls._get_curr_data=True
                        elif sec % 90 <30:
                            cls._triggering=False
                        else:
                            pass

    @classmethod
    def run(cls):
        while cls._active:
            if cls._logining:
                cls._online=cls._yqwweb.login()
                print('线程登录操作，目前的在线状态：'+str(cls._online))
            elif cls._get_curr_data:
                if cls._first_run:
                    cls._first_run=False
                    result_dic=cls._yqwweb.get_all_1000_data()
                    data_first=pd.DataFrame(result_dic,columns=['Issue','Number'])
                    data_first.sort_values('Issue',inplace=False)

                    # 读取本地数据文件sort_values()
                    try:
                        cls._strategy.database=pd.read_csv("数据记录"+str(cls._index)+".csv")
                        cls._strategy.database.sort_values('Issue',inplace=False)
                        # 读取未满的数据文件
                        while cls._strategy.database.shape[0]>=10000:
                            cls._index+=1
                            cls._strategy.database=pd.read_csv("数据记录"+str(cls._index)+".csv")
                            cls._strategy.database.sort_values('Issue',inplace=False)
                        issue=cls._strategy.database.iloc[cls._strategy.database.shape[0]-1,0]
                        print(issue)
                        cls._strategy.database=pd.concat([cls._strategy.database,data_first.loc[str(int(issue)+1):,:]],ignore_index=True,join='inner')
                        cls._strategy.database.to_csv("数据记录"+str(cls._index)+".csv")
                    except:
                        cls._strategy.database=data_first
                        cls._strategy.database.to_csv("数据记录"+str(cls._index)+".csv")
                result=cls._yqwweb.get_curr_data()
                data=pd.DataFrame([result],columns=['Issue','Number'])
                cls._strategy.database=pd.concat([cls._strategy.database,data],ignore_index=True,join='inner')
                if cls._strategy.database.shape[0]%100==0:
                    cls._strategy.database.to_csv("数据记录"+str(cls._index)+".csv")
                if cls._strategy.database.shape[0]>=10000:
                    cls._index+=1
                    cls._strategy.database=pd.DataFrame(columns=['Issue','Number'])
                print(result)
            elif cls._post:
                cls._yqwweb.post('611101')
            cls._logining=False
            cls._get_curr_data=False
            cls._post=False
            # 休眠1秒
            sleep(1)
